#include "../server/include/head.h"
#include <openssl/sha.h>
#include <openssl/evp.h>
/* Usage:  */

  //文件内容加密
int fileContentHash_sha256(char* fileName ,char* result){
    //1.一定注意 第一个参数为文件名 **!!2.第二个参数需要一个char 大小至少是64的数组
    //3.注意Makefile的编写 -lssl -lcrypto
    EVP_MD_CTX *ctx = EVP_MD_CTX_new(); //申请内存
    EVP_DigestInit(ctx,EVP_sha256());  //初始化

    char buf[4096];
    int fd =open(fileName,O_RDWR);
    if(fd == -1){
        printf("该文件不存在!\n");
        return -1;
    }
    while(1){
        bzero(buf,sizeof(buf));
        ssize_t sret =read(fd,buf,sizeof(buf));
        
        EVP_DigestUpdate(ctx,buf,sret);  //将读到的文件更新到ctx中
        if(sret == 0){
            break;
        }
    }
    unsigned char sha[SHA256_DIGEST_LENGTH];  //sha256占据20个字节
    EVP_DigestFinal(ctx,sha,NULL);
    for(int i=0; i < 32;i++){
        char temp[3] = {0};
        sprintf(temp,"%02x",sha[i]);
        strcat(result,temp);
    }
    printf("result1 = %s\n",result);
    return 0;
}
//int main(int argc, char *argv[]){
//    char buf[64]={0};
//    fileContentHash_sha256("file1",buf);
//    printf("result2 = %s\n",buf);
//    return 0;
//}
